import track from "./track"

/* 10 */
/***/
/**
 * MVVM双向绑定
 * @memberof MVVM
 * @description 双向绑定的属性，如果一方发生变化，另一方同样会跟随变化
 * @param {object} reactObject1 第一个绑定对象，可以是vue对象，或者是XbsjEarth中的对象
 * @param {string} reactProperty1 第一个绑定对象的属性名，必须是字符串类型，形式如：'prop1.prop2.prop3'
 * @param {object} reactObject2 第二个绑定对象，可以是vue对象，或者是XbsjEarth中的对象
 * @param {string} reactProperty2 第二个绑定对象的属性名，必须是字符串类型，形式如：'prop1.prop2.prop3'
 * @param {object} [params] 额外参数，暂时保留
 */
function bind(reactObject1, reactProperty1, reactObject2, reactProperty2) {
  const _ref = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  const _ref$r1Tor = _ref.r1Tor2;
  const r1Tor2 = _ref$r1Tor === undefined ? undefined : _ref$r1Tor;
  const _ref$r2Tor = _ref.r2Tor1;
  const r2Tor1 = _ref$r2Tor === undefined ? undefined : _ref$r2Tor;
  const _ref$equals = _ref.equals;
  const equals = _ref$equals === undefined ? undefined : _ref$equals;

  const disposers = [];

  disposers.push(track(reactObject1, reactProperty1, reactObject2, reactProperty2, {
    r2Tor1: r2Tor1,
    equals: equals
  }));

  disposers.push(track(reactObject2, reactProperty2, reactObject1, reactProperty1, {
    r2Tor1: r1Tor2,
    // 修复视域分析旋转时卡死的问题，原因是度和弧度转换得不对
    // equals应该始终保持(r1, r2)的顺序正确，因为equals的两个参数的单位可能不同，一个是度，一个是弧度！
    // equals: equals,
    equals: equals ? function(r1, r2) {
      return equals(r2, r1);
    } : undefined
  }));

  return function() {
    disposers.forEach(function(d) {
      return d();
    });
    disposers.length = 0;
  };
}

export {
  track,
  bind
};
export default bind;
